package com.ruoyi.order.service.impl;

import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.order.domain.WxForm;
import com.ruoyi.order.domain.WxFormItem;
import com.ruoyi.order.mapper.WxFormMapper;
import com.ruoyi.order.service.IWxFormService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 * 生成员工提成及报销模版表Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-09-04
 */
@Service
public class WxFormServiceImpl implements IWxFormService
{
    @Autowired
    private WxFormMapper wxFormMapper;

    /**
     * 查询生成员工提成及报销模版表
     * 
     * @param id 生成员工提成及报销模版表主键
     * @return 生成员工提成及报销模版表
     */
    @Override
    public WxForm selectWxFormById(Long id)
    {
        return wxFormMapper.selectWxFormById(id);
    }

    /**
     * 查询生成员工提成及报销模版表列表
     * 
     * @param wxForm 生成员工提成及报销模版表
     * @return 生成员工提成及报销模版表
     */
    @Override
    @DataScope(deptAlias = "d")
    public List<WxForm> selectWxFormList(WxForm wxForm)
    {
        return wxFormMapper.selectWxFormList(wxForm);
    }

    /**
     * 新增生成员工提成及报销模版表
     * 
     * @param wxForm 生成员工提成及报销模版表
     * @return 结果
     */
    @Transactional
    @Override
    public int insertWxForm(WxForm wxForm)
    {
        wxForm.setCreateTime(DateUtils.getNowDate());
        int rows = wxFormMapper.insertWxForm(wxForm);
        insertWxFormItem(wxForm);
        return rows;
    }

    /**
     * 修改生成员工提成及报销模版表
     * 
     * @param wxForm 生成员工提成及报销模版表
     * @return 结果
     */
    @Transactional
    @Override
    public int updateWxForm(WxForm wxForm)
    {
        wxForm.setUpdateTime(DateUtils.getNowDate());
        wxFormMapper.deleteWxFormItemByFormId(wxForm.getId());
        insertWxFormItem(wxForm);
        return wxFormMapper.updateWxForm(wxForm);
    }

    @Override
    public int updateOnlyWxForm(WxForm wxForm) {
        return wxFormMapper.updateWxForm(wxForm);
    }

    /**
     * 批量删除生成员工提成及报销模版表
     * 
     * @param ids 需要删除的生成员工提成及报销模版表主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWxFormByIds(Long[] ids)
    {
        wxFormMapper.deleteWxFormItemByFormIds(ids);
        return wxFormMapper.deleteWxFormByIds(ids);
    }

    /**
     * 删除生成员工提成及报销模版表信息
     * 
     * @param id 生成员工提成及报销模版表主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deleteWxFormById(Long id)
    {
        wxFormMapper.deleteWxFormItemByFormId(id);
        return wxFormMapper.deleteWxFormById(id);
    }

    @Override
    public List<WxForm> selectEnableForm() {
        LoginUser loginUser= SecurityUtils.getLoginUser();
        return wxFormMapper.selectEnableForm(loginUser.getDeptId());
    }

    /**
     * 新增生成单时出现的选项信息信息
     * 
     * @param wxForm 生成员工提成及报销模版表对象
     */
    public void insertWxFormItem(WxForm wxForm)
    {
        List<WxFormItem> wxFormItemList = wxForm.getWxFormItemList();
        Long id = wxForm.getId();
        if (StringUtils.isNotNull(wxFormItemList))
        {
            List<WxFormItem> list = new ArrayList<WxFormItem>();
            for (WxFormItem wxFormItem : wxFormItemList)
            {
                wxFormItem.setFormId(id);
                list.add(wxFormItem);
            }
            if (list.size() > 0)
            {
                wxFormMapper.batchWxFormItem(list);
            }
        }
    }
}
